package com.example.myys.ui.base

import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.database.Cursor
import android.net.Uri
import android.provider.DocumentsContract
import android.service.controls.ControlsProviderService.TAG
import android.util.Log
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.material3.Button
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import java.io.BufferedReader
import java.io.InputStream
import java.io.InputStreamReader
import java.util.Arrays


@SuppressLint("Range")
@Composable
fun PickSth(callBack: (filePath: Uri,fileName:String)->Unit){
    val context = LocalContext.current
    val launcher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {
        if (it.resultCode == Activity.RESULT_OK) {
            val uri= it.data?.data?:callBack(Uri.EMPTY,"null")
            Log.d(TAG, "选取的文件: $uri")
            // 如果需要使用文件的数据, 可以使用 ContentResolver 直接打开输入流
            var fileInputStream: InputStream? = null
            try {
                // 打开 Uri 的输入流
                fileInputStream = context.contentResolver.openInputStream(uri as Uri)
                //创建用于字符输入流中读取文本的bufferReader对象
                val br = BufferedReader(InputStreamReader(fileInputStream))
                var line:String=br.readLine()

                // 如果需要选取的文件的详细信息（MIME、文件名、修改时间、大小等）,
                // 则需要通过 content.getContentResolver().query(uri, ...) 查询（直接查询所有字段）
                val cursor = context.contentResolver.query(uri, null, null, null, null)
                var filename=""
                // 一般查询出来的只有一条记录
                if (cursor?.moveToFirst() == true) {
                    // 查看查询结果数据的的所有列, 不同系统版本列名数量可能不相同, 参考:
                    // [document_id, mime_type, _display_name, last_modified, flags, _size], 这里没有路径字段
                    Log.d(TAG, "columnNames: " + Arrays.toString(cursor.columnNames))

                    // 获取文件的 大小、文件名, 列名常量值参考: DocumentsContract.Document.COLUMN_XXX
                    // val size = cursor.getLong(cursor.getColumnIndex(DocumentsContract.Document.COLUMN_SIZE))
                    filename = cursor.getString(cursor.getColumnIndex(DocumentsContract.Document.COLUMN_DISPLAY_NAME))

                    // 输出所有列对应的值
                    for (column in cursor.columnNames) {
                        val index = cursor.getColumnIndex(column)
                        val valueDesc = when (cursor.getType(index)) {
                            Cursor.FIELD_TYPE_NULL      -> "$column: NULL"
                            Cursor.FIELD_TYPE_INTEGER   -> "$column: " + cursor.getInt(index)
                            Cursor.FIELD_TYPE_FLOAT     -> "$column: " + cursor.getFloat(index)
                            Cursor.FIELD_TYPE_STRING    -> "$column: " + cursor.getString(index)
                            Cursor.FIELD_TYPE_BLOB      -> "$column: BLOB"
                            else                        -> "$column: Unknown"
                        }
                        Log.d(TAG, valueDesc)
                    }
                }
                cursor?.close()
                callBack(uri,filename)
            } catch (e: Exception) {
                e.printStackTrace()
            } finally {
                if (fileInputStream != null) {
                    fileInputStream.close()
                }
            }
        }
    }
    Button({
        val intent=Intent(Intent.ACTION_GET_CONTENT)
        intent.type="*/*"
        intent.addCategory(Intent.CATEGORY_OPENABLE)
        launcher.launch(Intent.createChooser(intent, "选择一个文件"))
    }){

    }
}




